<?php

namespace App\Http\Controllers;


use SimpleSoftwareIO\QrCode\Facades\QrCode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

/**
 * 生成二维码
 * composer require simplesoftwareio/simple-qrcode 1.3.*
 * 使用 1.*  2.0 版本即可，使用 大于2.0 以上的会报各种错误
 */
class QrCodeController extends Controller
{

    /**
     * 生成二维码
     * @param $content 二维码内容
     * @param $is_save 是否保存二维码  默认fasle
     * @param $size 二维码大小
     * @param $color 二维码颜色 数组
     * @param $margin 二维码边距
     * @param $error_level 容错级别 说明
                        L 7% 的字节码恢复率.
                        M 15% 的字节码恢复率.
                        Q 25% 的字节码恢复率.
                        H 30% 的字节码恢复率.
                        容错级别越高,二维码里能存储的数据越少.
     *  encoding('UTF-8') 支持中文
     */
    public function setQr($content, $is_save = false, $size = 360, $margin = 1, $color = [0, 0, 0], $error_level = 'H')
    {
        if ($is_save) {
            //二维码保存路径
            $save_dir = public_path('uploads/');
            $address = 'qr/' . date('Y-m-d') . '/' . uniqid() . date('ymdhis') . '.png'; //保存地址
            $address_all =   $save_dir . '/' . $address;

            $address_dir = dirname($address_all);

            if (!file_exists($address_dir)) {
                mkdir($address_dir, 0777, true); //true  表示递归创建
            }

            QrCode::format('png')->encoding('UTF-8')->color($color[0], $color[1], $color[2])->margin($margin)->size($size)->errorCorrection($error_level)->generate($content, $address_all);
            return $address;
        } else {
            //删除过期的临时文件
            $filedir = public_path('uploads') . '/temp_qr/';
            del_past_imgs($filedir, 7200); //删除过期图片

            //二维码保存路径
            $save_dir = public_path('uploads/');
            $address = 'temp_qr/' . uniqid() . date('ymdhis') . '.png'; //保存地址
            $address_all =   $save_dir . '/' . $address;

            $address_dir = dirname($address_all);

            if (!file_exists($address_dir)) {
                mkdir($address_dir, 0777, true); //true  表示递归创建
            }

            QrCode::format('png')->encoding('UTF-8')->color($color[0], $color[1], $color[2])->margin($margin)->size($size)->errorCorrection($error_level)->generate($content, $address_all);
            return $address;
        }

        //最早不保存二维码使用此代码，但是有时候显示不出来 svg图片
        return QrCode::encoding('UTF-8')->color($color[0], $color[1], $color[2])->margin($margin)->size($size)->errorCorrection($error_level)->generate($content);
    }



    /**
     * 获取二维码 qr_code
     * @param  $table_name  表名
     */
    public function getQrCode($table_name, $filed = 'qr_code', $number = 8)
    {
        $prefix = $this->getQrCodePrefix($table_name);
        $i = 10;
        while ($i) {
            $qr_code = $prefix . get_rnd_upper_string($number); //固定前2位
            //判断qr_code是否重复
            $qr_code_exist = DB::table($table_name)->where($filed, $qr_code)->first();
            if ($qr_code_exist) {
                $i--;
            } else {
                return $qr_code;
            }
        }
        return false;
    }

    /**
     * 根据表名获取 二维码 前缀
     * @param $table_name
     */
    public function getQrCodePrefix($table_name)
    {
        $data = [
            'user_info' => '10', //用户
            'activity' => '11', //活动
            'reservation' => '12', //预约
            'reservation_seat' => '13', //预约的座位（座位号单独一个二维码）
            /*   'ebook' => '14', //电子书
            'audio_ebook' => '15', //有声电子书 */
            'goods_order' => '16', //商品兑换

            'ticket_activity_apply' => '', //抢门票活动，不需要前缀
        ];
        return $data[$table_name];
    }

}
